package com.zjun.annotation;

import com.zjun.enums.IdempotentSceneEnum;
import com.zjun.enums.IdempotentTypeEnum;

import java.lang.annotation.*;

@Target({ElementType.TYPE,ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Idempotent {
    /**
     * 幂等key
     * @return
     */
    String key() default "";

    /**
     * 触发幂等失败逻辑，返回错误提示信息
     * @return
     */
    String message() default "请稍后再试";

    /**
     *幂等场景
     * @return
     */
    IdempotentSceneEnum scene() default IdempotentSceneEnum.RESTAPI;

    IdempotentTypeEnum type() default IdempotentTypeEnum.PARAM;

    /**
     * 设置防重令牌Key前缀
     * @return
     */
    String uniqueKeyPrefix() default "";

    /**
     * 防重令牌过期时间
     * @return
     */
    long keyTimeout() default 3600L;
}
